#include <iostream>
#include <stdio.h>
#include <fstream>
#include <cstdlib>
#include <stdlib.h>
#include <cstring>
#include <sstream>
#include <gtk/gtk.h>
#include"intestazioni_giornate.h"
#include"Intestazioni_persona.h"

using namespace std ;

extern GtkBuilder *builder;

void crea_persona(persona *p);
void carica_risultati_dal_file();
void salva_nel_file();

int giono_mese_anno=0;
int day_attuale=1,mese_attuale=0,anno_attuale=1990;
int donna_uomo=0,inserimento_modifica=0;

persona *puntatore1=0;
persona *punt_attuale_persona;

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//                                                                                                finestra(quiz)
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

void disegna_cerchietto(cairo_t  *cr,int x,int y,int raggio,float  r,float  g,float b)
{
        cairo_set_source_rgb (cr,r,g,b);
        cairo_new_sub_path(cr);
        cairo_arc(cr,x,y,raggio,0,90);
        cairo_fill(cr);
        
}

extern "C" gboolean chiudi_programma(GtkWidget *widget,GdkEvent  *event, gpointer   user_data)  
{
  gtk_main_quit() ;
  return FALSE;  
}

extern "C" void apri_inserimento_persone( GtkButton *button,gpointer data )
{
    GtkWidget *ins_dialog =GTK_WIDGET(gtk_builder_get_object(builder,"window2") );
    gtk_widget_show_all(ins_dialog);
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//                                                                                finestra(Inserimento Persona)
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

extern "C" void chiudi_inserimento_persone( GtkButton *button,gpointer data )
{
    GtkWidget *ins_dialog =GTK_WIDGET(gtk_builder_get_object(builder,"window2") );
    gtk_widget_hide(ins_dialog);
      
}

extern "C" void modalita_inserimento_modifica( GtkButton *button,gpointer data )
{
   if(inserimento_modifica==0)
      inserimento_modifica=1;
   else
      inserimento_modifica=0;    
      
    GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea45") );
    gtk_widget_queue_draw (finestra);   
    
    finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea17") );
    gtk_widget_queue_draw (finestra);   
    
}

extern "C" void scorri_persona_destra( GtkButton *button,gpointer data )
{
   if(inserimento_modifica==0)
      return;
     
   if(punt_attuale_persona->pross!=0)
       punt_attuale_persona=punt_attuale_persona->pross;
       
      
    GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea45") );
    gtk_widget_queue_draw (finestra);   
    
    finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea17") );
    gtk_widget_queue_draw (finestra);   
}

extern "C" void scorri_persona_sinistra( GtkButton *button,gpointer data )
{
   if(inserimento_modifica==0)
      return;
     
   if(punt_attuale_persona->precc!=0)
       punt_attuale_persona=punt_attuale_persona->precc;
       
      
    GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea45") );
    gtk_widget_queue_draw (finestra);   
    
     finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea17") );
    gtk_widget_queue_draw (finestra);   
}

extern "C" gboolean disegna_Inserimento_modifica(GtkWidget  * widget,cairo_t  * cr,gpointer dati)
{  
        cairo_text_extents_t te;
        cairo_select_font_face(cr,"Ubunto",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
        cairo_set_font_size(cr,15);
        cairo_text_extents(cr,"a",&te);

       int x=15,y=15,raggio;
       float r,g,b;
             
       raggio=15; 
           
       if(inserimento_modifica==0)
            {     r=0.0;
                 g=0.999;
                 b=0.0;  } 
       else
           {     r=0.999;
                 g=0.0;
                 b=0.0;  } 
 
       disegna_cerchietto(cr,x,y,raggio,r,g,b);
       
       raggio=13;   
       r=0.860;
       g=0.860;
       b=0.860;  
       disegna_cerchietto(cr,x,y,raggio,r,g,b);
       
       cairo_move_to(cr,15,25);
       
       if(inserimento_modifica==0)
          {cairo_set_source_rgb (cr, 0.0,0.999, 0.0);
           cairo_move_to(cr,12.5,20);
            cairo_show_text(cr,"I");
           }
       else
          {cairo_set_source_rgb (cr, 0.999,0.0, 0.0);
            cairo_move_to(cr,7.5,20);
            cairo_show_text(cr,"M");
          }
                    
      return FALSE;  
}

extern "C" gboolean disegna_nome(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{


       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,25);
       cairo_text_extents(cr,"a",&te);
       cairo_move_to(cr,6,30);
       

       cairo_show_text(cr,"Nome");
    
    return FALSE;
}

extern "C" gboolean disegna_cognome(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{

       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,25);
       cairo_text_extents(cr,"a",&te);
       cairo_move_to(cr,6,30);
       

          cairo_show_text(cr,"Cognome");
       
    return FALSE;
}

extern "C" gboolean disegna_scuola_superiore(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{

       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,25);
       cairo_text_extents(cr,"a",&te);
       cairo_move_to(cr,6,30);
       

          cairo_show_text(cr,"Scuola Superiore");
      
    return FALSE;
}

extern "C" gboolean disegna_universita(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{

       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,25);
       cairo_text_extents(cr,"a",&te);
       cairo_move_to(cr,6,30);
       

          cairo_show_text(cr,"Univeristà");
      
    return FALSE;
}

extern "C" gboolean disegna_lavoro(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{

       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,25);
       cairo_text_extents(cr,"a",&te);
       cairo_move_to(cr,6,30);
       

          cairo_show_text(cr,"Lavoro");
        
    return FALSE;
}

extern "C" gboolean disegna_situazione_sentimentale(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{

       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,20);
       cairo_text_extents(cr,"a",&te);
       cairo_move_to(cr,6,30);
       

          cairo_show_text(cr,"Situazione Sentimentale");
   
    return FALSE;  
}

extern "C" gboolean disegna_sesso(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{

       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,20);
       cairo_text_extents(cr,"a",&te);
       cairo_move_to(cr,6,30);
       

          cairo_show_text(cr,"Sesso");
       
    return FALSE;
}


extern "C" gboolean disegna_giorno_mese_anno(GtkWidget  * widget,cairo_t  * cr,gpointer dati)
{  
        cairo_text_extents_t te;
        cairo_select_font_face(cr,"Ubunto",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
        cairo_set_font_size(cr,15);
        cairo_text_extents(cr,"a",&te);

       int x=10,y=10,raggio;
       float r,g,b;
       
       raggio=10;
              
       r=1;
       g=0.42;
       b=0.74;
       
    if(giono_mese_anno==0)
       {r=0.999;
       g=0.0;
       b=0.0;}
      
   if(giono_mese_anno==1)
      {r=0.0;
       g=0.999;
       b=0.0;}
      
    if(giono_mese_anno==2)
      {r=0.0;
       g=0.0;
       b=0.999;}
       
       for(int i=0;i<2;i++)
            {  for(int j=0;j<2;j++)
                     {disegna_cerchietto(cr,x,y,raggio,r,g,b);
                       x=x+80;
                      }
                x=10;
                y=20;
             }      
             

        cairo_set_source_rgb  (cr, r,g,b);
        cairo_rectangle (cr,10 ,0 ,80 ,30 );
        cairo_fill(cr); 
           
        cairo_set_source_rgb  (cr, r,g,b);
        cairo_rectangle (cr,0 ,10,100,10 );
        cairo_fill(cr);  
        
               
        raggio=5;
        
       r=0.860;
       g=0.860;
       b=0.860;
       x=10; y=10;
       
         for(int i=0;i<2;i++)
            {  for(int j=0;j<2;j++)
                     {disegna_cerchietto(cr,x,y,raggio,r,g,b);
                       x=x+80;
                      }
                x=10;
                y=20;
             }   
                  
        cairo_set_source_rgb (cr, 0.860,0.860, 0.860);
        cairo_rectangle (cr,10 ,5 ,80 ,20 );
        cairo_fill(cr); 
                 
        cairo_set_source_rgb (cr, 0.860,0.860, 0.860);
        cairo_rectangle (cr,5 ,10 ,90,10 );
        cairo_fill(cr);       
            
 
      
   cairo_move_to(cr,25,20);   
      
   if(giono_mese_anno==0)
     {  cairo_move_to(cr,25,20);
       cairo_set_source_rgb (cr,0.999,0.0,0.0);
       cairo_show_text(cr,"Giorno"); }
       
   if(giono_mese_anno==1)
          { cairo_move_to(cr,25,20); 
           cairo_set_source_rgb (cr,0.,0.999,0.0);
       cairo_show_text(cr,"Mese"); }
       
   if(giono_mese_anno==2)
           {cairo_move_to(cr,25,20);  
            cairo_set_source_rgb (cr, 0.0,0.0,0.999);
       cairo_show_text(cr,"Anno"); }  
                 
      return FALSE;  
}

extern "C" void bottone_ultimi_risul( GtkButton *button,gpointer data )
{
   if(giono_mese_anno==0)
       giono_mese_anno=1;
   else    
      {if(giono_mese_anno==1)
          giono_mese_anno=2;
       else
          {if(giono_mese_anno==2)
              giono_mese_anno=0;
          }
      }        
       
      GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea43") );
    gtk_widget_queue_draw (finestra);    
    
    finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea23") );
    gtk_widget_queue_draw (finestra);                   

}

extern "C" void bottone_destro_data( GtkButton *button,gpointer data )
{
   if(giono_mese_anno==0)
       {if(day_attuale<31)
            day_attuale++; }
   else    
      {if(giono_mese_anno==1)
            {if(mese_attuale<11)
                 mese_attuale++; }
       else
          {if(giono_mese_anno==2)
               anno_attuale++; 
          }
      }        
       
      GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea23") );
    gtk_widget_queue_draw (finestra);             

}

extern "C" void bottone_sinistro_data( GtkButton *button,gpointer data )
{
   if(giono_mese_anno==0)
       {if(day_attuale>1)
            day_attuale--; }
   else    
      {if(giono_mese_anno==1)
            {if(mese_attuale>0)
                 mese_attuale--; }
       else
          {if(giono_mese_anno==2)
               anno_attuale--; 
          }
      }        
       
      GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea23") );
    gtk_widget_queue_draw (finestra);             
  
   

}

extern "C" gboolean disegna_data(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{
       char mesi[][20]={"Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"};
  
       cairo_text_extents_t te;
       cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
       cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
       cairo_set_font_size(cr,20);
       cairo_text_extents(cr,"a",&te);
     
       int x=100, y=30;
       char stringa[33];
       
       sprintf (stringa, "%d",day_attuale);
       
       if(giono_mese_anno==0)
          cairo_set_source_rgb (cr, 0.0,0.0, 0.999);
       else   
           cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
          
       cairo_move_to(cr,x,y);
       cairo_show_text(cr,stringa);
       
              if(giono_mese_anno==1)
          cairo_set_source_rgb (cr, 0.0,0.0, 0.999);
       else   
           cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
                    
       x=x+40;
       cairo_move_to(cr,x,y);
       cairo_show_text(cr,mesi[mese_attuale]);
       
       sprintf (stringa, "%d",anno_attuale );
       
       
       if(giono_mese_anno==2)
          cairo_set_source_rgb (cr, 0.0,0.0, 0.999);
       else   
           cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
     
        x=x+100;
       cairo_move_to(cr,x,y);
       cairo_show_text(cr,stringa);
       
    return FALSE;
}


extern "C" void bottone_uomo_donna( GtkButton *button,gpointer data )
{
   if(donna_uomo==0)
       donna_uomo=1;
   else    
      {if(donna_uomo==1)
          donna_uomo=0;
      }        
       
      GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea44") );
    gtk_widget_queue_draw (finestra);             

}

extern "C" gboolean disegna_uomo_donna(GtkWidget  * widget,cairo_t  * cr,gpointer dati)
{  
        cairo_text_extents_t te;
        cairo_select_font_face(cr,"Ubunto",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
        cairo_set_font_size(cr,15);
        cairo_text_extents(cr,"a",&te);

       int x=10,y=10,raggio;
       float r,g,b;
       
       raggio=10;
              

       
    if(donna_uomo==1)
       {r=0.0;
        g=0.127*4;
        b=0.999;}
      
   if(donna_uomo==0)
      {r=0.999;
        g=0.192;
        b=(0.203)*4;}
           
       for(int i=0;i<2;i++)
            {  for(int j=0;j<2;j++)
                     {disegna_cerchietto(cr,x,y,raggio,r,g,b);
                       x=x+80;
                      }
                x=10;
                y=20;
             }      
             

        cairo_set_source_rgb  (cr, r,g,b);
        cairo_rectangle (cr,10 ,0 ,80 ,30 );
        cairo_fill(cr); 
           
        cairo_set_source_rgb  (cr, r,g,b);
        cairo_rectangle (cr,0 ,10,100,10 );
        cairo_fill(cr);  
        
               
        raggio=5;
        
       r=0.860;
       g=0.860;
       b=0.860;
       x=10; y=10;
       
         for(int i=0;i<2;i++)
            {  for(int j=0;j<2;j++)
                     {disegna_cerchietto(cr,x,y,raggio,r,g,b);
                       x=x+80;
                      }
                x=10;
                y=20;
             }   
                  
        cairo_set_source_rgb (cr, 0.860,0.860, 0.860);
        cairo_rectangle (cr,10 ,5 ,80 ,20 );
        cairo_fill(cr); 
                 
        cairo_set_source_rgb (cr, 0.860,0.860, 0.860);
        cairo_rectangle (cr,5 ,10 ,90,10 );
        cairo_fill(cr);       
            
   
   cairo_move_to(cr,25,20);   
      
   if(donna_uomo==1)
     {  cairo_move_to(cr,25,20);
       cairo_set_source_rgb (cr,0.0,0.127*4,0.999);
       cairo_show_text(cr,"Uomo"); }
       
   if(donna_uomo==0)
          { cairo_move_to(cr,25,20); 
           cairo_set_source_rgb (cr,0.999,0.192,0.203*4);
       cairo_show_text(cr,"Donna"); }
       

                 
      return FALSE;  
}


extern "C" void aggiungi_persone( GtkButton *button,gpointer data )
{  
   char mesi[][20]={"Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"};


    GtkTextView *ins_textview1 = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "textview1")) ;
    GtkTextView *ins_textview2 = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "textview2")) ;
    GtkTextView *ins_textview3 = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "textview3")) ;
    GtkTextView *ins_textview4 = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "textview4")) ;
    GtkTextView *ins_textview5 = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "textview5")) ;
    GtkTextView *ins_textview6 = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "textview6")) ;
      
    GtkTextBuffer *buffer1 = gtk_text_view_get_buffer(ins_textview1) ;
    GtkTextBuffer *buffer2 = gtk_text_view_get_buffer(ins_textview2) ;
    GtkTextBuffer *buffer3 = gtk_text_view_get_buffer(ins_textview3) ;
    GtkTextBuffer *buffer4 = gtk_text_view_get_buffer(ins_textview4) ;
    GtkTextBuffer *buffer5 = gtk_text_view_get_buffer(ins_textview5) ;
    GtkTextBuffer *buffer6 = gtk_text_view_get_buffer(ins_textview6) ;
     
     GtkTextIter start1, end1;
     GtkTextIter start2, end2;
     GtkTextIter start3, end3;
     GtkTextIter start4, end4;
     GtkTextIter start5, end5;
     GtkTextIter start6, end6;
     
     gtk_text_buffer_get_bounds(buffer1,&start1,&end1);
     gtk_text_buffer_get_bounds(buffer2,&start2,&end2);
     gtk_text_buffer_get_bounds(buffer3,&start3,&end3);
     gtk_text_buffer_get_bounds(buffer4,&start4,&end4);
     gtk_text_buffer_get_bounds(buffer5,&start5,&end5);
     gtk_text_buffer_get_bounds(buffer6,&start6,&end6);
   
     char *elem_string1 = gtk_text_buffer_get_text(buffer1, &start1, &end1, TRUE);
     char *elem_string2 = gtk_text_buffer_get_text(buffer2, &start2, &end2, TRUE);
     char *elem_string3 = gtk_text_buffer_get_text(buffer3, &start3, &end3, TRUE);
     char *elem_string4 = gtk_text_buffer_get_text(buffer4, &start4, &end4, TRUE);
     char *elem_string5 = gtk_text_buffer_get_text(buffer5, &start5, &end5, TRUE);
     char *elem_string6 = gtk_text_buffer_get_text(buffer6, &start6, &end6, TRUE);
     
     istringstream s1(elem_string1);
     istringstream s2(elem_string2);
     istringstream s3(elem_string3);
     istringstream s4(elem_string4);
     istringstream s5(elem_string5);
     istringstream s6(elem_string6);
     
      char NOMI_MAIUSCOLO[2][20];
    
      persona *p;
       if(inserimento_modifica==0) 
           p=new persona();
       else
           p=punt_attuale_persona;    
      
      if(inserimento_modifica==0){

      s1>>NOMI_MAIUSCOLO[0];
      s2>>NOMI_MAIUSCOLO[1];

      NOMI_MAIUSCOLO[0][0]=toupper(NOMI_MAIUSCOLO[0][0]);
      NOMI_MAIUSCOLO[1][0]=toupper(NOMI_MAIUSCOLO[1][0]);

      strcpy(p->nome,NOMI_MAIUSCOLO[0]);
      strcpy(p->cognome,NOMI_MAIUSCOLO[1]);
      
            p->giorno_nascita=day_attuale;
      strcpy(p->mese_nascita,mesi[mese_attuale]);
      p->anno_nascita=anno_attuale;
    
      char d_u[][10]={"Donna","Uomo"};
      if(donna_uomo==0)
         strcpy(p->sesso,d_u[0]);
     else
         strcpy(p->sesso,d_u[1]);
      
      }
      
      strcpy(p->scuola_superiore,"NonEffettuato");
      strcpy(p->universita,"NonEffettuato");
      strcpy(p->lavoro,"NonEffettuato");
      strcpy(p->sit_sentimentale,"Single");
              
      s3>>p->scuola_superiore;
      s4>>p->universita;
      s5>>p->lavoro;
      s6>>p->sit_sentimentale;
                    
    if(inserimento_modifica==0) 
        crea_persona(p);
     
   
   salva_nel_file();
   
   GtkWidget *finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea25") );
   gtk_widget_queue_draw (finestra); 
     
    finestra=GTK_WIDGET(gtk_builder_get_object(builder,"drawingarea45") );
   gtk_widget_queue_draw (finestra);   
}


void crea_persona(persona *p)
{
  persona *q= puntatore1;
  persona *prec;

    while(q!=0)
           {if(strcmp(p->cognome,q->cognome)<0||(strcmp(p->cognome,q->cognome)==0&&strcmp(p->nome,q->nome)<0))
                break;

            prec=q;
            q=q->pross;}

  if(puntatore1==0)
     {
       puntatore1=p;
       punt_attuale_persona=puntatore1; 
       p->precc=0;
     }
  else{
          if(q!=puntatore1)
              {prec->pross=p;
                p->precc=prec;}
          else
              {puntatore1=p;
               p->precc=0;
              }
          }
          
     p->pross=q;   
  
}

void stampa_inserimento_persona(cairo_t  *cr,persona *p)
{
       int x=10,y=30,inc=1,y_inizio;
           char stringa[33];

        while(p!=0)
        {
             sprintf(stringa,"%d",inc);
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,stringa);

             x=x+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->nome);
             x=x+100;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->cognome);
             x=x+100;
        
             x=10;
             y=y+30;
             y_inizio=y;
             
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Data Di Nascita");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Sesso");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Scuola Superiore");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Università");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Lavoro");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Situazione Sentimentale");
             
             x=x+250;
             y=y_inizio;
                         
             sprintf(stringa,"%d",p->giorno_nascita);
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, stringa);
             x=x+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, p->mese_nascita);
             x=x+100;
             sprintf(stringa,"%d",p->anno_nascita);
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, stringa);
             x=x-120;
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, p->sesso);
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->scuola_superiore);
            y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->universita);
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->lavoro);
            y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->sit_sentimentale);
                         
             x=10;
             y=y+40;
             inc++;
            
             p=p->pross;
        }

}

void stampa_modifica_persona(cairo_t  * cr,persona *p)
{
       int x=10,y=30,inc=1,y_inizio;
           char stringa[33];

             sprintf(stringa,"%d",inc);
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,stringa);

             x=x+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->nome);
             x=x+100;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->cognome);
             x=x+100;
        
             x=10;
             y=y+30;
             y_inizio=y;
             
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Data Di Nascita");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Sesso");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Scuola Superiore");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Università");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Lavoro");
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,"Situazione Sentimentale");
             
             x=x+250;
             y=y_inizio;
                         
             sprintf(stringa,"%d",p->giorno_nascita);
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, stringa);
             x=x+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, p->mese_nascita);
             x=x+100;
             sprintf(stringa,"%d",p->anno_nascita);
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, stringa);
             x=x-120;
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr, p->sesso);
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->scuola_superiore);
            y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->universita);
             y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->lavoro);
            y=y+20;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->sit_sentimentale);
                         

}



extern "C" gboolean disegna_lista_nomi(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{
     cairo_set_source_rgb (cr, 0.999,0.999, 0.999);
     cairo_paint ( cr); 
          
   cairo_text_extents_t te;
   cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
   cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
   cairo_set_font_size(cr,20);
   cairo_text_extents(cr,"",&te);
      
   if(inserimento_modifica==0) 
      stampa_inserimento_persona(cr,puntatore1);
   else
      stampa_modifica_persona(cr,punt_attuale_persona);
        
       return FALSE;   
}

extern "C" gboolean disegna_modifica_nome(GtkWidget  * widget,  cairo_t  * cr ,  gpointer dati )
{
    if(inserimento_modifica==0)
          return TRUE;
          
   cairo_text_extents_t te;
   cairo_set_source_rgb (cr, 0.0,0.0, 0.0);
   cairo_select_font_face(cr,"Arial",CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
   cairo_set_font_size(cr,20);
   cairo_text_extents(cr,"",&te);
      
         int y=30,x=30;

   persona *p=punt_attuale_persona;
   

             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->nome);
             x=x+100;
             cairo_move_to(cr,x,y);
             cairo_show_text(cr,p->cognome);

        
       return FALSE;   
}

int contatore(int cont)
{
  persona *p=puntatore1;

  while(p!=0)
            {cont++;
             p=p->pross;}
 
  return cont;
}

void salva_nel_file()
{
  

    persona *p=puntatore1;

   int cont=0;

    cont=contatore(cont); 

   char vet_nomi[cont][50];


    char stringa[30],stringa_file[50];
 
   int cont2=0;
   
    while(p!=0)
    {
     
      strcpy(stringa,p->nome);
      strcat(stringa,"_");
      strcat(stringa,p->cognome);
      strcat(stringa,".txt");
      
      strcpy(stringa_file,"persone/");
      strcat(stringa_file,stringa);

      strcpy(vet_nomi[cont2],stringa_file);

        ofstream f;
        f.open(stringa_file) ;

        f<<p->nome<<endl;
        f<<p->cognome<<endl;
        f<<p->scuola_superiore<<endl;
        f<<p->universita<<endl;
        f<<p->lavoro<<endl;
        f<<p->sit_sentimentale<<endl;
        f<<p->giorno_nascita<<endl;
        f<<p->mese_nascita<<endl;
        f<<p->anno_nascita<<endl;
        f<<p->sesso<<endl;
       
        p=p->pross;
        cont2++;
        f.close();
    }
    
     ofstream s1;
     s1.open("persone/nomi_persone.txt") ;

     for(int i=0;i<cont;i++)
           s1<<vet_nomi[i]<<endl;

     s1.close(); 
     
}


void carica_risultati_dal_file()
{
   
  int cont=0,i;
  char var[50];

   ifstream f,f1;
   f.open("persone/nomi_persone.txt") ;

   while(f>>var)
            {cont++; }  
   
    f.close();

    char vet_nomi[cont][50];

   f1.open("persone/nomi_persone.txt") ;

   for(i=0;i<cont;i++)
         f1>>vet_nomi[i];
   
    f1.close();
  
   i=0;
   while(i<cont)
             {
                ifstream f;
                f.open(vet_nomi[i]);
            
                persona *p=new persona();

               f>>p->nome;
               f>>p->cognome;
               f>>p->scuola_superiore;
               f>>p->universita;
               f>>p->lavoro;
               f>>p->sit_sentimentale;
               f>>p->giorno_nascita;
               f>>p->mese_nascita;
               f>>p->anno_nascita;
               f>>p->sesso;

               
               persona *q=puntatore1;
               persona *prec=0;   
   
               while(q!=0)
                        {prec=q;
                          q=q->pross;}

              if(puntatore1==0)
                 {
                  puntatore1=p;
                  punt_attuale_persona=puntatore1;
                 }
             else
                 {
                 prec->pross=p;
                 }

                   p->precc=prec;
                   p->pross=q;  
                i++;
        }
   
   
}



